{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "854b9f4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:35:45] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:35:45] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:35:45] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:35:45] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:35:45] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:45] {2345} INFO - Estimated sufficient time budget=1990s. Estimated necessary time budget=2s.\n",
      "[flaml.automl.logger: 05-14 13:35:45] {2392} INFO -  at 0.3s,\testimator xgboost's best error=0.3456,\tbest estimator xgboost's best error=0.3456\n",
      "[flaml.automl.logger: 05-14 13:35:45] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2392} INFO -  at 0.5s,\testimator xgboost's best error=0.3240,\tbest estimator xgboost's best error=0.3240\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.3240,\tbest estimator xgboost's best error=0.3240\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2392} INFO -  at 0.9s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2392} INFO -  at 1.1s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:46] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:47] {2392} INFO -  at 2.1s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:47] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:47] {2392} INFO -  at 2.2s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:47] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:48] {2392} INFO -  at 2.7s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:48] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:48] {2392} INFO -  at 3.0s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:48] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:49] {2392} INFO -  at 3.4s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:49] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:49] {2392} INFO -  at 3.7s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:49] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:49] {2392} INFO -  at 4.0s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:49] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:50] {2392} INFO -  at 4.4s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:50] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:50] {2392} INFO -  at 5.1s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:50] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:51] {2392} INFO -  at 5.3s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:51] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:51] {2392} INFO -  at 5.8s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:51] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:51] {2392} INFO -  at 6.1s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:51] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:52] {2392} INFO -  at 6.4s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:52] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:52] {2392} INFO -  at 6.8s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:52] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:52] {2392} INFO -  at 7.0s,\testimator xgboost's best error=0.3195,\tbest estimator xgboost's best error=0.3195\n",
      "[flaml.automl.logger: 05-14 13:35:52] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:53] {2392} INFO -  at 7.5s,\testimator xgboost's best error=0.3177,\tbest estimator xgboost's best error=0.3177\n",
      "[flaml.automl.logger: 05-14 13:35:53] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:53] {2392} INFO -  at 8.0s,\testimator xgboost's best error=0.3177,\tbest estimator xgboost's best error=0.3177\n",
      "[flaml.automl.logger: 05-14 13:35:53] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:54] {2392} INFO -  at 8.6s,\testimator xgboost's best error=0.3177,\tbest estimator xgboost's best error=0.3177\n",
      "[flaml.automl.logger: 05-14 13:35:54] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:54] {2392} INFO -  at 9.0s,\testimator xgboost's best error=0.3177,\tbest estimator xgboost's best error=0.3177\n",
      "[flaml.automl.logger: 05-14 13:35:54] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:55] {2392} INFO -  at 9.7s,\testimator xgboost's best error=0.3177,\tbest estimator xgboost's best error=0.3177\n",
      "[flaml.automl.logger: 05-14 13:35:55] {2628} INFO - retrain xgboost for 0.1s\n",
      "[flaml.automl.logger: 05-14 13:35:55] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=0.9930549820434494, colsample_bynode=None,\n",
      "              colsample_bytree=0.7853572660907482, device=None,\n",
      "              early_stopping_rounds=None, enable_categorical=False,\n",
      "              eval_metric=None, feature_types=None, gamma=None,\n",
      "              grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.10364846416942076,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=8,\n",
      "              min_child_weight=0.487073213513591, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=31,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:35:55] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:35:55] {1932} INFO - Time taken to find the best model: 7.5338218212127686\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 31, 'max_leaves': 8, 'min_child_weight': 0.487073213513591, 'learning_rate': 0.10364846416942076, 'subsample': 0.8972578867440919, 'colsample_bylevel': 0.9930549820434494, 'colsample_bytree': 0.7853572660907482, 'reg_alpha': 0.0009765625, 'reg_lambda': 6.325599286927451}\n",
      "accuracy = 0.7590361445783133\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 13]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred1 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)\n",
    "\n",
    "## 测试集效果评估\n",
    "from flaml.ml import sklearn_metric_loss_score\n",
    "print('accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred1, y_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "78616cd9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Tdx1112YOHEinnjiCQCcU0l7hsqpXuZTrqRrTHDrxbFjxxSPHzt2DFlZWWqURATg+AH4xHcdR40ahebmZmRlZQ2ZWQDIzMyMWI1Eg50ql5xvSStMJlPohDIouK24qamJWaWI2rZtG5YvX47Zs2dj06ZNoUaGcyppyVflVC/zKZt0jTnnnHOQkJCADz74IPRYZ2cnDh48iKlTp6pYGRnZ4cOHMXnyZMVnUALAp59+itLSUkybNg179+6Fz+cLPbdnzx6MHDmS16OTak6VS863pBV33nknlixZonjswIEDAIDS0lJmlSJm+/btWL16NRYsWIBf/OIXijfnOaeSVpwsp3qZT9mka0x0dDQWLlyItWvXYteuXTh8+DBWrFiBrKwsXHzxxWqXRwY1atQofOMb38CqVavw0Ucfoby8HD/72c/wz3/+E7feeiuuuuoqdHd34yc/+QkcDgd27tyJ3/72t7jlllvULp0M7FS55HxLWnH55Zfj73//O55++mnU1NTg7bffxgMPPIDLL78cJSUlzCpFRGVlJX7605/i4osvxi233AKn04mWlha0tLSgq6uLcyppwqlyqpf51BQIBAJqF0FKPp8PTzzxBHbu3In+/n5MmzYNDz30EPLy8tQujQysra0Na9euxTvvvIPOzk6MHTsWd911V+hdx08++QSPPvooDh48CLvdjsWLF2PhwoUqV01Gct9996G+vh5bt24NPXaqXHK+JTUMldX//d//xTPPPIOKigokJibiiiuuwB133BG6MRezSmfbM888gyeffHLI5/793/8djz32GOdUUt1wcqqH+ZRNOhEREREREZFGcLs7ERERERERkUawSSciIiIiIiLSCDbpRERERERERBrBJp2IiIiIiIhII9ikExEREREREWkEm3QiIiIiIiIijWCTTkRERERERKQRbNKJiIgMJBAIqF0CERERnYRF7QKIiIiM7L777sOrr7560tfk5ubirbfe+tq/a8eOHSgvL8d99933tX+WmkaPHo3bbrsNy5cvV7sUIiKiM45NOhERkYqWLl2Ka6+9NvT1xo0bcfDgQWzYsCH0WHR09Bn5XU8//TTOPffcM/KziIiI6Oxgk05ERKSigoICFBQUhL5OS0tDdHQ0Jk2apF5RREREpBpek05ERCTA0aNHccstt2DKlCmYMmUKli1bhtraWsVrtm7diksvvRRlZWWYNWsWHn74YXR3dwMA5s6di/r6erz66qsYPXo06urqhvw9tbW1+OEPf4jp06dj4sSJuOaaa/D2228rXvPmm2/i+uuvx+TJkzF+/Hhceuml2LZtW+j5Dz74AKNHj8aePXuwaNEiTJgwARdeeCF27NiBY8eO4bbbbsPkyZMxZ84cbNmy5Uvf995772HBggWYMGECLr74YsXPHorL5cJDDz2EmTNnoqysDP/xH/+BPXv2nM7wEhERaQabdCIiIo2rrKzEtddeC6fTicceewyPPvooamtrcd1118HpdAIA/vSnP+HnP/85FixYgOeffx7Lli3DH//4RzzyyCMAgA0bNsBut2POnDl46aWXkJGR8aXf4/f7ccstt6C3txePP/44Nm7ciJSUFCxduhTV1dUAgL/97W9YtmwZxo0bh40bN+Kpp55Cbm4uVq9ejX379il+3o9//GPMnTsXzzzzDIqKirBy5UrccMMNGDVqFNavX49x48bhZz/7GT755BPF961YsQJjx47Fr371K5x//vlYvXo1tm7dOuTYuN1ufP/738euXbuwYsUKbNiwAVlZWbjpppvYqBMRkUjc7k5ERKRxGzZsQGxsLLZs2YKEhAQAwHnnnYeLLroIzz33HO6991588MEHyM3NxYIFCxAVFYVzzz0X8fHxaG9vBwCMHTsW0dHRSEtL+8qt9E6nE+Xl5bj11lsxZ84cAMCECROwYcMGuN1uAIDD4cD3vvc9/OQnPwl93+TJkzF9+nR8+OGHmDJlSujxq666CjfeeCMAID4+Htdccw0mTJiA22+/HQAwfvx47Nq1C/v27cOECRNC33fRRReFfv6sWbNw7NgxPP3006H/tsH++Mc/4vDhw3j55ZcxceJEAMDs2bOxaNEirF27Fq+88kp4g05ERKQSNulEREQa9/7772P69OmIjY3FwMAAACAhIQFTp07F7t27AQAzZszASy+9hPnz5+Pb3/42LrzwQlxxxRUwmUzD/j3p6ekoLS3Fgw8+iN27d2P27Nm44IILcP/994dec9NNNwEAent7UVNTg8rKShw4cAAA4PV6FT9v8uTJip8NINRIA0BqaioAoKurS/F9//Zv/6b4+tvf/jZ27dqFyspKlJSUKJ7bs2cP7HY7xo0bFxobAPjWt76Fxx9/HB0dHUhOTh72GBAREamNTToREZHGuVwu/PnPf8af//znLz2XlpYGAPjud78Lv9+P7du3Y8OGDfjlL3+J3Nxc3HnnnbjsssuG9XtMJhM2b96Mp59+Gm+88QZeffVVWK1WXHTRRXj44YeRkpKCtrY2rFy5Em+++SZMJhMKCwvxzW9+E8CXP4M9uOo/WFxc3CnrOHErvs1mAwB0dnZ+6bUulwstLS0YN27ckD+rpaWFTToREYnCJp2IiEjjEhMTMXPmzNDW8cEsli8O5Zdffjkuv/xydHV14b333sOmTZtw9913Y+rUqcjMzBzW78rMzMTDDz+MlStX4vDhw/jLX/6CTZs2ITk5GatWrcJdd92F8vJy/OY3v8GUKVMQHR2Nvr4+7Nix44z997pcLsXXwevug836YImJiSgqKsLatWuH/Fl5eXlnrC4iIqJI4I3jiIiINO7cc8+Fw+HAmDFjUFZWhrKyMowfPx5btmzBG2+8AQC44447cNtttwE43rh+5zvfwdKlS+Hz+XDs2DEA+NL13Cf6+OOPMXPmTHzyyScwmUwYM2YMVqxYgVGjRqGpqQkAsHfvXlxyySWYMWNG6PPb33nnHQDHbzx3Jrz11luKr//yl78gNzdX8VF1Qeeeey4aGxths9lCY1NWVoY9e/bgueeeg9lsPiM1ERERRQpX0omIiDRu6dKluPbaa3HLLbfguuuuQ0xMDF566SW8+eabWL9+PYDj16SvXLkSP//5zzF79mx0dnZiw4YNKCoqwjnnnAMASEpKwsGDB/GPf/wDEyZMQGxsrOL3jB07FrGxsbjnnnuwfPlypKenY/fu3Th06BBuuOEGAMdvJPff//3fGDduHLKysvDxxx/j17/+NUwmE/r6+s7If++WLVsQGxuLSZMm4a9//Sv+7//+D+vWrRvytfPnz8e2bdtw44034tZbb0V2djZ2796NTZs2YeHChbBarWekJiIiokhhk05ERKRx55xzDn73u9/hySefxD333INAIIBRo0bhV7/6FebNmwcAuPbaa+H1evHiiy9i+/btiI2NxXnnnYe777471KguXrwYP/3pT7FkyRL85je/wdSpUxW/JyYmBps3b8a6devw6KOPorOzE0VFRfjP//xPzJ8/HwDw2GOPYfXq1Vi9ejUAoKioCKtWrcJrr72Gjz766Iz89z7wwAN49dVX8etf/xrFxcVYv349LrnkkiFfGx8fj9/97ndYt24d1qxZg66urtC1+IsXLz4j9RAREUWSKXDiXV6IiIiIVPDBBx/ghhtuwAsvvIDp06erXQ4REZEqeE06ERERERERkUawSSciIiIiIiLSCG53JyIiIiIiItIIrqQTERERERERaQSbdCIiIiIiIiKNYJNOREREREREpBFs0omIiIiIiIg0gk06ERERERERkUawSSciIiIiIiLSCDbpRERERERERBrBJp2IiIiIiIhII/4/2GE/hnJxuwkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']}) \n",
    "\n",
    "# 创建一个包含预测值和真实值的DataFrame\n",
    "df = pd.DataFrame({\n",
    "    'index': range(len(y_pred1)),\n",
    "    'y_pred': y_pred1,\n",
    "    'y_test': y_test,\n",
    "    'difference': y_pred1 - y_test\n",
    "})\n",
    "\n",
    "# 设置Seaborn的风格为白色网格，这是一种清晰且保守的风格\n",
    "sns.set(style=\"whitegrid\")\n",
    "\n",
    "# 选择一个适合论文的颜色调色板，例如 \"muted\"\n",
    "sns.color_palette(\"muted\")\n",
    "\n",
    "# 创建一个折线图来显示预测值和真实值之间的差异\n",
    "plt.figure(figsize=(12, 5))\n",
    "sns.lineplot(data=df, x='index', y='difference', marker='o', color='blue', markersize=6, linewidth=1, markeredgecolor='blue', markerfacecolor='none')\n",
    "plt.xlabel('Test sample')\n",
    "plt.yticks(np.arange(-10, 11))\n",
    "plt.ylabel('Difference')\n",
    "plt.grid(True, which='both', linestyle='--', linewidth=0.5)\n",
    "\n",
    "\n",
    "# Highlight the circles where the absolute difference is greater than or equal to 3 in red\n",
    "for i in range(len(df)):\n",
    "    if abs(df['difference'].iloc[i]) >= 3:\n",
    "        plt.plot(df['index'].iloc[i], df['difference'].iloc[i], 'ro', markersize=6)\n",
    "\n",
    "# 显示图表\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7d0ceb1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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zyzaw0YqA3g8HrVLUAyzyMQsMjGLPMFgCP9unpilODTNF5oAgEAgtUtjR2aRjj322JjHly5dCgD44ovdZ0xyc3MB7D7zND4+DmBH0xEZY//6179w9tlnQ6/X449//OOk112ZzeboNVp33303li9fjvr6erz66qs49dRTMXv2bFx44YX4xz/+ocrqZkrvl7qKPJx8VC0A4DdPfILRMa+i7783WvnZB5hFi9hIZYCRkRG1S1AMs8jELDIxizxbO0bg9gaRbTWhoSpf7XISluovU5HrnHw+X8zjkcYhKytrt9dEFoxobW2NeTzy/2fNmgVgYow9//zzuOSSS1BaWoonn3wS9fV7X6lu69atePnll6NLrw8ODiI/Px/ARAMXDAZVuddWMvbLxd+Yh+rSHAw7vbjnqfUpWxJdKz/7ALNoERspIiKiFFn/5cRqfQfNKoZBr+4S2emooaEBlZWVePHFF2Mef/311wEACxcu3O01NTU1qK6uxquvvhrz+Kuvvora2lpUVlYCAD788ENcd911OPTQQ/HEE09M6dSl1atX4/zzz0dpaSkAoKioCP39E/u4v78fBoMh2liluyyzEavOWwijQY8PNvXg5fdb1C6JSHW8yjUDNDQ0qF2CYphFJmaRiVnkiTRSh2rg+igAKCgoSOnn6XQ6XHvttbjyyitx5ZVX4swzz8S2bdtw55134sQTT8TcuXMxNjaGxsZGzJw5E4WFhQCAH/3oR7j++uuRn5+Pr371q3jjjTfw8ssv46677gIAeL1e3H///cjOzsb/+3//L7rSX0RZWdlujdUHH3yA9evX44477og+tmzZMjzxxBOYO3cuHn30URxzzDEwGlP/VStZ+6WuIg/fWz4Xv3vuc6x97nPMqy9CTVluUj4rQis/+wCzaBFnpDLArqczpDNmkYlZZGIWWdzeALa0Tlwfle434o3Y05LjyXTSSSdhzZo16OjowP/7f/8PDz30EM4++2ysXr0aAPDvf/8bZ511Fv75z39GX3P66afj5z//Od577z1ceuml+OCDD/Df//3f+PrXvw4A+OSTT9Df3w+Hw4GLL74YZ511Vsx/Tz/99G513HHHHfjBD34QvQYLAC688EIcfvjh+PGPfwy/34+f//znyd0Ye5DM/fKNJfVYsP8M+AIhrH7sY/j8yb0GTAs/+xHMoj2ckcoAqb4YOJmYRSZm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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "# Set style\n",
    "sns.set(style=\"whitegrid\")\n",
    "differences = y_pred1 - y_test\n",
    "# Create a histogram plot using seaborn\n",
    "plt.figure(figsize=(10, 6))\n",
    "# 创建带有分布曲线的直方图\n",
    "g = sns.histplot(differences, bins=np.arange(-5, 5) + 0.5, kde=True, discrete=True, shrink=0.8, stat='proportion')\n",
    "plt.xticks(np.arange(-8, 6))\n",
    "plt.xlabel('Differences')\n",
    "plt.ylabel('probability')\n",
    "plt.grid(True, which='both', linestyle='--', linewidth=0.5)\n",
    "\n",
    "for patch in g.patches:\n",
    "    height = patch.get_height()\n",
    "    if height > 0.01:\n",
    "        g.text(patch.get_x() + patch.get_width() / 2., 1.02 * height, f'{round(height * 100, 2)}%',\n",
    "                ha='center', va='bottom')\n",
    "\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9aea5273",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6AAAAHDCAYAAAA6OndsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADEzElEQVR4nOzdZ3hU1fr38e9kkgkhofcmIAqEJkpH6U2qdKSEIggKiEgVBZGiIkWpIlURQ5EDKFVAiiCigKJ0hGCUhBJqQsgkM5mZ50We7D9DAiQIkwC/z3VxHWftvdZe+9ZDcs9qJpfL5UJERERERETkAfNK6w6IiIiIiIjI40EJqIiIiIiIiHiEElARERERERHxCCWgIiIiIiIi4hFKQEVERERERMQjlICKiIiIiIiIRygBFREREREREY/wTusOSNo7cOAALpcLHx+ftO6KiIiIiIikIbvdjslk4tlnn30g7WsEVHC5XMYfeXBcLhc2m01x9gDF2jMUZ89RrD1DcfYcxdozFGfPeZRi/aDzAo2ACj4+PthsNp566ikyZsyY1t15ZMXExHDs2DHF2QMUa89QnD1HsfYMxdlzFGvPUJw951GK9aFDhx5o+xoBFREREREREY9QAioiIiIiIiIeoQRUREREREREPEIJqIiIiIiIiHiEElARERERERHxCCWgIiIiIiIi4hFKQEVERERERMQjlICKiIiIiIiIRygBFREREREREY9QAioiIiIiIiIeoQRUREREREREPEIJqIiIiIiIiHiEElARERERERHxCCWgIiIiIiIi4hFKQEVERERERMQjlICKwWQypXUXHmkmkwk/Pz/F2QMUa89QnD1HsfYMxdlzFGvPUJw9R7FOOZPL5XKldSckbR06dAiAsmXLpnFPREREREQeL06nCy+v9JO4PujcwPuBtCoPpcnBvxF24Xpad0NERERE5LFQME8mhnSukNbd8CgloGIIu3CdkPDItO6GiIiIiMhj5+rVq4wbN44dO3Zgs9l49tln+eijjyhYsCAABw8eZPz48Zw8eZJnn32WDz74gHz58qXqGYcPH2blypVcuXKF0qVL06VLFzJmzAiA0+lk/vz5BAcHc/nyZcqWLcvw4cMpX748AHv37mXQoEFUqVKFyZMnYzKZCAsL49SpU9SuXTvFfdAaUBERERERkTQ2cOBA9u3bR79+/RgyZAh/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LFkSwNg2/csvv0wyAupyubDZbAA0aNCACRMmAAlHp4wbNw6AGTNmYDabOX78OBcuXODQoUNAQvKVmEjGxMQwatQowsPDuXTpEuPGjaNFixa0a9eOHTt2MGrUKGrWrEnu3LmJjY1NNgHduXMnU6dOZcmSJTz55JP8888/PPfcc+TNmxe73c769ev56quvGDt2LG3atKFYsWLGOpNt27ZRrlw5cubMmaTdEiVKsGzZMgIDA5ON2YULF4ypRrd+m1CoUKFk20wUFBTExYsXjTUxMTEx2Gw243PGjBnvOooqIiIiIiKSXtzz/M0lS5bg7+/PtGnTyJo1a5I1oQUKFKBnz57Uq1ePJ598kq1btxrnWcbExBhD04lTVYcMGUL16tVp3bo1K1ascEsi9+3bR0hIiJHUVq5cmWLFigFQu3ZtKlWqxO7du2nVqlWSBDQxYVu5ciUfffQR3t7enD59mt27dzNixAgAPvroI5xOJxUqVEg2kVy8eDF2u52vvvrqttNxk3Pjxg1+++23266xGTBgwG3r/vXXX0ybNs2YJgz/NwX35p107XY7RYsWNUZJRURERERE0qtUJ6CXL18mNDSUxYsXM3PmTLZt28aCBQsICwtj9OjRxMXF0b9/f5o3b07z5s0xmUx888031KtXzxgB3bVrF5MmTXJrNzo62kju2rVr53atdevWtG7dGrvdzsmTJzl06BDr1q3j5ZdfBuCzzz7Dy8sLl8tFTEyMWwK6du1a/Pz8+PLLLylWrBjr16/no48+4vXXX6dw4cLExMRgt9v55ZdfsFgsFC9ePMk7T5gwgaZNm7J8+XI6duxolCfuJJjcFF273c6IESN4+umnjWNmnE5nkim3169f59q1a8TExGA2m43yIkWK8OWXX5I9e3aj/a+//prffvuNTz/91GgvcURaREREREQkvUt1AhoREcEzzzzD559/zpkzZwgKCuLatWtGcunr60u3bt0YM2YMixYt4uOPP3ZbD7p3714GDBhA7969Afjzzz/p1asXZrPZGJG8mcvl4p133uHPP//kzJkz5M+fnzJlyrht/x4XF8eiRYs4ffo0DoeD3LlzG9fatGlDnTp1yJ49O3v27GHKlCm89957NGzYEEgYaezRoweFCxfmgw8+SDaZzJMnD5999hmlS5cGEhK/3r17c+rUKXLlykWhQoWS1Fm0aBEnTpzg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V16hcOHC99TG7NmzOXv27G2vh4SEMHPmTPz9/Y2ysLAwihYtSosWLQgLCwPgl19+oX79+vfUBxEREXn8KAEVEXnIfPTRR/j5+fHaa6/dU/3jx48zb9483n777WSvO51O3nnnHV588UVKly7tVu7l5YWXlxdOp9Noq2LFivfUDxEREXn8KAEVEXmI/PLLL6xbt478+fMzatQoJk6cyPnz51NcPz4+nhEjRtCmTRuqVauW7D1ffvkl4eHhjBw50q08V65chIeHc/LkSXLmzMmff/7J008//Z/eR0RERB4vSkA9zOFwYLVajdGDu4mIiGDHjh0PtlMi8tCYNGkSAFevXuXq1asEBwfz0ksvERoamqL68+bNIyoqimHDhiV7/Z9//mH69OmMHz+eLFmyuF0rXLgwRYoUoWXLlnTs2JHvv/+e6tWr/6f3ERERkcfLY7cJ0SuvvMLevXvx8fFJcs3lcmG1Wtm1axe5c+c2ys6fP5/iDTbsdjt58uS57fUDBw4QFBSUbAI6d+5catWq5VZ25swZRowYwZ49ewAIDAzE19c3yfmGdrudunXrMn369BT1U0QePocPH+bw4cPUr1+fmTNnYjKZCAsLo02bNsyYMYMpU6bcsf6pU6eYPXs28+fPx9/fn6tXr7pdd7lcvPvuuzRu3JjatWsn28bChQuJiIjAy8uLpUuX8v3339O/f39ef/11evbseb9eVURERB5Rj10CarFY6NOnj3GkwM3CwsKoV6+eW7IZExND3bp1sVgsbklrbGwsdrsdf39/vLwSBpLtdjs2m41jx44BCclj/fr1yZgxo9HWvn37+Oabb+jXrx/btm0DEn6p7NKlC5UqVUrSJx8fHywWi9vn7777jsKFC/Ptt99SokQJAgMDWbBgAUePHr0PERKR9CpxlLNnz57Gl1AFCxbk+eefv+v//x0OB++88w7t27encuXKyd4THBzMmTNnmD179m3bMZvN5MuXjxkzZtC8eXNatWrFRx99xMiRI+nWrRve3o/djxURERFJhcfuNwWTycQXX3zBihUrklxLblTS39/fSCgTHTt2jO7du1O3bl0+/PDDJKORiRITxwMHDnDlyhWqVauGn58fZrMZwPhF7cSJE5QvX95IVCFhJCJxww+LxcLx48cJCAhwS4JXrVpFgwYNCAwMBEh2VFdEHh1+fn4AFCpUyK3c19fX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/YzN31QoFFor3ubn5yMyMhI+Pj6PvSdNxe3VNDqoVCqhUqmgp6enEcjl5uaiTZs2j3XNR8lkMkgkEvzwww/Izs7Gxx9/rHUfRUVF2LBhAz7++GNhdPfu3buwtLSEnp4eFAoFpFIpTE1NtcovLi6ucq/D2rh69SoAYPPRXNy4Vf3CSkQNrVsnc3ztN7Tac0pKSpCSkgJ7e/tGvxLds4ztrDtsa91gO+sO21o32M6605TauiI2cHJyqpfyG/Qd0Mo8GnwCgLm5OT7++OMnKq+201LFYnGlI4hPG3wC/7+Rq5eXV5XnmJiYwN/fXyPNyspK+FlfX7/S4BPAUwWfREREREREusJ9O4iIiIiIiEgnGIASERERERGRTjxzU3Cp4VhbVT7Fl+hZwn5KRERE1HgxACXBvEl9GroKRLWiUqmhp8dth4iIiIgaG07BJQDlK/VKpdKGrkaTJpVKkZyczHauAww+iYiIiBonBqAkeMZ25Gly1Go1pFIp25mIiIiImi0GoERERERERKQTDECJiIiIiIhIJxiAEhERERERkU4wACUiIiIiIiKdYABKREREREREOsEAlIiIiIiIiHSCASgRERERERHpBANQIiIiIiIi0gkGoERERERERKQTDECJiIiIiIhIJxiAEhERERERkU4wACUiIiIiIiKdYABKREREREREOiFSq9Xqhq4ENay4uDio1WoYGBhAJBI1dHWaLLVaDblcznbWAba1brCddYdtrRtsZ91hW+sG21l3mlJby2QyiEQiODs710v5+vVSKjUqFX9JGvtflmedSCSCRCJp6Go0C2xr3WA76w7bWjfYzrrDttYNtrPuNKW2FolE9RoXcASUiIiIiIiIdILvgBIREREREZFOMAAlIiIiIiIinWAASkRERERERDrBAJSIiIiIiIh0ggEoERERERER6QQDUCIiIiIiItIJBqBERERERESkEwxAiYiIiIiISCcYgBIREREREZFOMAAlIiIiIiIinWAASkRERERERDrBAJSIiIiIiIh0ggEoUR1JSkrChAkT4OjoiH79+mHNmjVQqVQ15ktLS4OdnZ3Gn5kzZ+qgxkRV27dvn1a/rPhTE/Zpelao1WrMnj0b69at00jftm0bBg8ejJ49e2L06NH4/fffa11mSEiIVv+OjY2t66oTVaqyPu3t7V3ps3rhwoW1KpN9mnSNAWgT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",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "############ 排序版 ############\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #显示中文\n",
    "# 获取特征重要性\n",
    "feature_importance_sum = automl.model.estimator.feature_importances_.sum()\n",
    "feature_importance_ratios =  automl.model.estimator.feature_importances_ / feature_importance_sum\n",
    "# 将特征重要性与其对应的特征名进行排序\n",
    "sorted_idx = feature_importance_ratios.argsort()[::-1]\n",
    "features = X_train.columns[sorted_idx]\n",
    "importances = feature_importance_ratios[sorted_idx]\n",
    "\n",
    "importances = importances * 100\n",
    "\n",
    "# 绘制特征重要性条形图\n",
    "plt.figure(figsize=(10, 5))\n",
    "plt.barh(range(len(features)), importances, align='center')\n",
    "plt.yticks(range(len(features)), features)\n",
    "plt.xlabel('特征重要性')\n",
    "# plt.title('Feature Importances of LightGBM Model')\n",
    "plt.gca().invert_yaxis()  # 反转y轴，使得最重要的特征在上方\n",
    "for index, value in enumerate(importances):\n",
    "    plt.text(value, index, f'{value:.2f}%')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3e4aa640",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:35:57] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:35:57] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:35:57] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:35:57] {1901} INFO - List of ML learners in AutoML Run: ['lgbm', 'rf', 'xgboost', 'extra_tree', 'xgb_limitdepth', 'lrl1']\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2219} INFO - iteration 0, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2345} INFO - Estimated sufficient time budget=809s. Estimated necessary time budget=19s.\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2392} INFO -  at 0.1s,\testimator lgbm's best error=0.3666,\tbest estimator lgbm's best error=0.3666\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2219} INFO - iteration 1, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2392} INFO -  at 0.3s,\testimator lgbm's best error=0.3666,\tbest estimator lgbm's best error=0.3666\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2392} INFO -  at 0.4s,\testimator xgboost's best error=0.3676,\tbest estimator lgbm's best error=0.3666\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.3647,\tbest estimator xgboost's best error=0.3647\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2219} INFO - iteration 4, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2392} INFO -  at 0.6s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3647\n",
      "[flaml.automl.logger: 05-14 13:35:57] {2219} INFO - iteration 5, current learner extra_tree\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2392} INFO -  at 0.8s,\testimator extra_tree's best error=0.3666,\tbest estimator xgboost's best error=0.3647\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2392} INFO -  at 0.9s,\testimator xgboost's best error=0.3647,\tbest estimator xgboost's best error=0.3647\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2219} INFO - iteration 7, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2392} INFO -  at 1.0s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3647\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2219} INFO - iteration 8, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2392} INFO -  at 1.1s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3647\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2392} INFO -  at 1.4s,\testimator xgboost's best error=0.3628,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2392} INFO -  at 1.6s,\testimator xgboost's best error=0.3628,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:35:58] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:35:59] {2392} INFO -  at 2.7s,\testimator xgboost's best error=0.3628,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:35:59] {2219} INFO - iteration 12, current learner extra_tree\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 2.9s,\testimator extra_tree's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 13, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 3.0s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 14, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 3.2s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 15, current learner extra_tree\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 3.3s,\testimator extra_tree's best error=0.3656,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 16, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 3.3s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 3.5s,\testimator xgboost's best error=0.3628,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 18, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2392} INFO -  at 3.5s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:00] {2219} INFO - iteration 19, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2392} INFO -  at 3.7s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2219} INFO - iteration 20, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2392} INFO -  at 3.9s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2219} INFO - iteration 21, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2392} INFO -  at 4.0s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2219} INFO - iteration 22, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2392} INFO -  at 4.1s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2219} INFO - iteration 23, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2392} INFO -  at 4.1s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3628\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2392} INFO -  at 4.6s,\testimator xgboost's best error=0.3599,\tbest estimator xgboost's best error=0.3599\n",
      "[flaml.automl.logger: 05-14 13:36:01] {2219} INFO - iteration 25, current learner extra_tree\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2392} INFO -  at 4.8s,\testimator extra_tree's best error=0.3656,\tbest estimator xgboost's best error=0.3599\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2219} INFO - iteration 26, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2392} INFO -  at 4.9s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3599\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2219} INFO - iteration 27, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2392} INFO -  at 5.0s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3599\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2392} INFO -  at 5.3s,\testimator xgboost's best error=0.3599,\tbest estimator xgboost's best error=0.3599\n",
      "[flaml.automl.logger: 05-14 13:36:02] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2392} INFO -  at 5.8s,\testimator xgboost's best error=0.3560,\tbest estimator xgboost's best error=0.3560\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2219} INFO - iteration 30, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2392} INFO -  at 5.9s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3560\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2219} INFO - iteration 31, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2392} INFO -  at 6.0s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3560\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2219} INFO - iteration 32, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2392} INFO -  at 6.1s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3560\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2219} INFO - iteration 33, current learner xgboost\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:03] {2392} INFO -  at 6.6s,\testimator xgboost's best error=0.3551,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:03] {2219} INFO - iteration 34, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:04] {2392} INFO -  at 6.7s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:04] {2219} INFO - iteration 35, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:04] {2392} INFO -  at 6.9s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:04] {2219} INFO - iteration 36, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:04] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.3551,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:04] {2219} INFO - iteration 37, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:05] {2392} INFO -  at 7.8s,\testimator xgboost's best error=0.3551,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:05] {2219} INFO - iteration 38, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:05] {2392} INFO -  at 8.6s,\testimator xgboost's best error=0.3551,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:05] {2219} INFO - iteration 39, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:05] {2392} INFO -  at 8.7s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:05] {2219} INFO - iteration 40, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2392} INFO -  at 8.8s,\testimator rf's best error=0.3666,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2219} INFO - iteration 41, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2392} INFO -  at 9.1s,\testimator xgboost's best error=0.3551,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2219} INFO - iteration 42, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2392} INFO -  at 9.2s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2219} INFO - iteration 43, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2392} INFO -  at 9.6s,\testimator xgboost's best error=0.3551,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:06] {2219} INFO - iteration 44, current learner extra_tree\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2392} INFO -  at 9.8s,\testimator extra_tree's best error=0.3656,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2219} INFO - iteration 45, current learner rf\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2392} INFO -  at 9.9s,\testimator rf's best error=0.3647,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2219} INFO - iteration 46, current learner lgbm\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2392} INFO -  at 10.0s,\testimator lgbm's best error=0.3666,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2219} INFO - iteration 47, current learner xgb_limitdepth\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2392} INFO -  at 10.0s,\testimator xgb_limitdepth's best error=0.3669,\tbest estimator xgboost's best error=0.3551\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2628} INFO - retrain xgboost for 0.1s\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=0.7908167868969228, colsample_bynode=None,\n",
      "              colsample_bytree=0.8737975755295666, device=None,\n",
      "              early_stopping_rounds=None, enable_categorical=False,\n",
      "              eval_metric=None, feature_types=None, gamma=None,\n",
      "              grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.28668209753767016,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=15,\n",
      "              min_child_weight=1.2573156037629256, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=24,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:36:07] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:36:07] {1932} INFO - Time taken to find the best model: 6.589427471160889\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 24, 'max_leaves': 15, 'min_child_weight': 1.2573156037629256, 'learning_rate': 0.28668209753767016, 'subsample': 0.9754409320668012, 'colsample_bylevel': 0.7908167868969228, 'colsample_bytree': 0.8737975755295666, 'reg_alpha': 0.0009765625, 'reg_lambda': 6.900041051465705}\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 14]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred2 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7bed1b60",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:07] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:36:07] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:36:07] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:36:07] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2345} INFO - Estimated sufficient time budget=930s. Estimated necessary time budget=1s.\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2392} INFO -  at 0.1s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:07] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 0.3s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 0.4s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 0.5s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 0.8s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 0.9s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 1.1s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2392} INFO -  at 1.2s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:08] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.3s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.4s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.5s,\testimator xgboost's best error=0.4578,\tbest estimator xgboost's best error=0.4578\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.6s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.7s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.8s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 1.9s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 2.0s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2392} INFO -  at 2.2s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:09] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 2.3s,\testimator xgboost's best error=0.4568,\tbest estimator xgboost's best error=0.4568\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 2.4s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 2.5s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 2.6s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 2.7s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 2.9s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 3.0s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 25, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 3.1s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 26, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2392} INFO -  at 3.2s,\testimator xgboost's best error=0.4539,\tbest estimator xgboost's best error=0.4539\n",
      "[flaml.automl.logger: 05-14 13:36:10] {2219} INFO - iteration 27, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 3.3s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 3.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 3.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 30, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 3.7s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 31, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 3.8s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 32, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 4.0s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 33, current learner xgboost\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:11] {2392} INFO -  at 4.2s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:11] {2219} INFO - iteration 34, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 4.3s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 35, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 4.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 36, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 4.5s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 37, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 4.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 38, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 4.8s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 39, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 5.0s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 40, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 5.1s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 41, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2392} INFO -  at 5.2s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:12] {2219} INFO - iteration 42, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 5.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 43, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 5.5s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 44, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 5.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 45, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 5.7s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 46, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 5.9s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 47, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 6.0s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 48, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2392} INFO -  at 6.1s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:13] {2219} INFO - iteration 49, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 6.3s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 50, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 6.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 51, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 6.5s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 52, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 6.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 53, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 6.7s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 54, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 6.9s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 55, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 7.0s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 56, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2392} INFO -  at 7.1s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:14] {2219} INFO - iteration 57, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 58, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 59, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.5s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 60, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 61, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.7s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 62, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.8s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 63, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 7.9s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 64, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 8.1s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 65, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2392} INFO -  at 8.2s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:15] {2219} INFO - iteration 66, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 8.3s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 67, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 8.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 68, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 8.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 69, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 8.7s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 70, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 8.8s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 71, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 8.9s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 72, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 9.0s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 73, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2392} INFO -  at 9.2s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:16] {2219} INFO - iteration 74, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2392} INFO -  at 9.3s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2219} INFO - iteration 75, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2392} INFO -  at 9.4s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2219} INFO - iteration 76, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2392} INFO -  at 9.6s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2219} INFO - iteration 77, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2392} INFO -  at 9.8s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2219} INFO - iteration 78, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2392} INFO -  at 9.9s,\testimator xgboost's best error=0.4530,\tbest estimator xgboost's best error=0.4530\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2628} INFO - retrain xgboost for 0.0s\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=0.9538169710351936, colsample_bynode=None,\n",
      "              colsample_bytree=1.0, device=None, early_stopping_rounds=None,\n",
      "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
      "              gamma=None, grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.03882559289786523,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=6,\n",
      "              min_child_weight=0.3649001871297655, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=4,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:36:17] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:36:17] {1932} INFO - Time taken to find the best model: 3.3344037532806396\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 4, 'max_leaves': 6, 'min_child_weight': 0.3649001871297655, 'learning_rate': 0.03882559289786523, 'subsample': 0.8414980129739656, 'colsample_bylevel': 0.9538169710351936, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.2733104837090339}\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 15]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred3 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9b8080e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:17] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:36:17] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:36:17] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:36:17] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:36:17] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2345} INFO - Estimated sufficient time budget=980s. Estimated necessary time budget=1s.\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 0.1s,\testimator xgboost's best error=0.3416,\tbest estimator xgboost's best error=0.3416\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 0.3s,\testimator xgboost's best error=0.3416,\tbest estimator xgboost's best error=0.3416\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 0.4s,\testimator xgboost's best error=0.3416,\tbest estimator xgboost's best error=0.3416\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.3416,\tbest estimator xgboost's best error=0.3416\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 0.7s,\testimator xgboost's best error=0.3416,\tbest estimator xgboost's best error=0.3416\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 0.9s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2392} INFO -  at 1.0s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:18] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:19] {2392} INFO -  at 1.4s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:19] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:19] {2392} INFO -  at 1.6s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:19] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:19] {2392} INFO -  at 1.9s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:19] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:20] {2392} INFO -  at 2.1s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:20] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:20] {2392} INFO -  at 2.4s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:20] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:20] {2392} INFO -  at 2.7s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:20] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:21] {2392} INFO -  at 3.2s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:21] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:21] {2392} INFO -  at 3.4s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:21] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:21] {2392} INFO -  at 3.8s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:21] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2392} INFO -  at 4.1s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2392} INFO -  at 4.3s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2392} INFO -  at 4.7s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2392} INFO -  at 5.0s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:22] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:23] {2392} INFO -  at 5.5s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:23] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:23] {2392} INFO -  at 5.7s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:23] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:23] {2392} INFO -  at 6.0s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:23] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:24] {2392} INFO -  at 6.2s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:24] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:24] {2392} INFO -  at 6.6s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:24] {2219} INFO - iteration 25, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:24] {2392} INFO -  at 6.7s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:24] {2219} INFO - iteration 26, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:25] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:25] {2219} INFO - iteration 27, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:25] {2392} INFO -  at 7.6s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:25] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:25] {2392} INFO -  at 7.9s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:25] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:26] {2392} INFO -  at 8.2s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:26] {2219} INFO - iteration 30, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:26] {2392} INFO -  at 8.4s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:26] {2219} INFO - iteration 31, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:26] {2392} INFO -  at 8.6s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:26] {2219} INFO - iteration 32, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:27] {2392} INFO -  at 9.4s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:27] {2219} INFO - iteration 33, current learner xgboost\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:27] {2392} INFO -  at 9.7s,\testimator xgboost's best error=0.3378,\tbest estimator xgboost's best error=0.3378\n",
      "[flaml.automl.logger: 05-14 13:36:27] {2628} INFO - retrain xgboost for 0.1s\n",
      "[flaml.automl.logger: 05-14 13:36:27] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=0.8269267172233895, colsample_bynode=None,\n",
      "              colsample_bytree=0.8633421465368963, device=None,\n",
      "              early_stopping_rounds=None, enable_categorical=False,\n",
      "              eval_metric=None, feature_types=None, gamma=None,\n",
      "              grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.5301671261740505,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=11,\n",
      "              min_child_weight=1.527780981725008, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=14,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:36:27] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:36:27] {1932} INFO - Time taken to find the best model: 1.369663953781128\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 14, 'max_leaves': 11, 'min_child_weight': 1.527780981725008, 'learning_rate': 0.5301671261740505, 'subsample': 0.9298925478780308, 'colsample_bylevel': 0.8269267172233895, 'colsample_bytree': 0.8633421465368963, 'reg_alpha': 0.0009765625, 'reg_lambda': 3.7332045217784837}\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 16]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred4 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3aeb2db2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:28] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:36:28] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:36:28] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:36:28] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2345} INFO - Estimated sufficient time budget=970s. Estimated necessary time budget=1s.\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2392} INFO -  at 0.1s,\testimator xgboost's best error=0.6379,\tbest estimator xgboost's best error=0.6379\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2392} INFO -  at 0.3s,\testimator xgboost's best error=0.6379,\tbest estimator xgboost's best error=0.6379\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2392} INFO -  at 0.5s,\testimator xgboost's best error=0.6379,\tbest estimator xgboost's best error=0.6379\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.6379,\tbest estimator xgboost's best error=0.6379\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2392} INFO -  at 0.7s,\testimator xgboost's best error=0.6291,\tbest estimator xgboost's best error=0.6291\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2392} INFO -  at 0.9s,\testimator xgboost's best error=0.6282,\tbest estimator xgboost's best error=0.6282\n",
      "[flaml.automl.logger: 05-14 13:36:28] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2392} INFO -  at 1.0s,\testimator xgboost's best error=0.6282,\tbest estimator xgboost's best error=0.6282\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2392} INFO -  at 1.4s,\testimator xgboost's best error=0.6282,\tbest estimator xgboost's best error=0.6282\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2392} INFO -  at 1.6s,\testimator xgboost's best error=0.6282,\tbest estimator xgboost's best error=0.6282\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2392} INFO -  at 1.9s,\testimator xgboost's best error=0.6282,\tbest estimator xgboost's best error=0.6282\n",
      "[flaml.automl.logger: 05-14 13:36:29] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:30] {2392} INFO -  at 2.2s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:30] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:30] {2392} INFO -  at 2.4s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:30] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:30] {2392} INFO -  at 2.7s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:30] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2392} INFO -  at 3.2s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2392} INFO -  at 3.3s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2392} INFO -  at 3.6s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2392} INFO -  at 3.8s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2392} INFO -  at 3.9s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:31] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:32] {2392} INFO -  at 4.3s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:32] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:32] {2392} INFO -  at 4.5s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:32] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:32] {2392} INFO -  at 4.9s,\testimator xgboost's best error=0.6243,\tbest estimator xgboost's best error=0.6243\n",
      "[flaml.automl.logger: 05-14 13:36:32] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:33] {2392} INFO -  at 5.2s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:33] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:33] {2392} INFO -  at 5.5s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:33] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:33] {2392} INFO -  at 5.8s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:33] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:34] {2392} INFO -  at 6.1s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:34] {2219} INFO - iteration 25, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:34] {2392} INFO -  at 6.2s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:34] {2219} INFO - iteration 26, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:34] {2392} INFO -  at 6.7s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:34] {2219} INFO - iteration 27, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2392} INFO -  at 7.0s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2392} INFO -  at 7.6s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2219} INFO - iteration 30, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2392} INFO -  at 7.9s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:35] {2219} INFO - iteration 31, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:36] {2392} INFO -  at 8.1s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:36] {2219} INFO - iteration 32, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:36] {2392} INFO -  at 8.8s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:36] {2219} INFO - iteration 33, current learner xgboost\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:37] {2392} INFO -  at 9.0s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:37] {2219} INFO - iteration 34, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:37] {2392} INFO -  at 9.4s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:37] {2219} INFO - iteration 35, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:37] {2392} INFO -  at 9.9s,\testimator xgboost's best error=0.6223,\tbest estimator xgboost's best error=0.6223\n",
      "[flaml.automl.logger: 05-14 13:36:37] {2628} INFO - retrain xgboost for 0.1s\n",
      "[flaml.automl.logger: 05-14 13:36:37] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=0.9895607902233388, colsample_bynode=None,\n",
      "              colsample_bytree=0.8015688506294939, device=None,\n",
      "              early_stopping_rounds=None, enable_categorical=False,\n",
      "              eval_metric=None, feature_types=None, gamma=None,\n",
      "              grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.03427002758569207,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=8,\n",
      "              min_child_weight=4.495311468275063, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=10,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:36:37] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:36:37] {1932} INFO - Time taken to find the best model: 5.199754953384399\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 10, 'max_leaves': 8, 'min_child_weight': 4.495311468275063, 'learning_rate': 0.03427002758569207, 'subsample': 0.9268850165683128, 'colsample_bylevel': 0.9895607902233388, 'colsample_bytree': 0.8015688506294939, 'reg_alpha': 0.0009765625, 'reg_lambda': 0.04279988723858541}\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 17]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred5 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b5da86bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:38] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:36:38] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:36:38] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:36:38] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2345} INFO - Estimated sufficient time budget=1091s. Estimated necessary time budget=1s.\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2392} INFO -  at 0.1s,\testimator xgboost's best error=0.3630,\tbest estimator xgboost's best error=0.3630\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2392} INFO -  at 0.4s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:38] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:39] {2392} INFO -  at 1.1s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:39] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:39] {2392} INFO -  at 1.2s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:39] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:40] {2392} INFO -  at 2.2s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:40] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:40] {2392} INFO -  at 2.3s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:40] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2392} INFO -  at 2.8s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2392} INFO -  at 3.0s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2392} INFO -  at 3.4s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2392} INFO -  at 3.6s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:41] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:42] {2392} INFO -  at 3.9s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:42] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:42] {2392} INFO -  at 4.1s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:42] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:42] {2392} INFO -  at 4.6s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:42] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2392} INFO -  at 4.8s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2392} INFO -  at 5.1s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2392} INFO -  at 5.3s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2392} INFO -  at 5.5s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:43] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:44] {2392} INFO -  at 5.9s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:44] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:44] {2392} INFO -  at 6.1s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:44] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:44] {2392} INFO -  at 6.5s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:44] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2392} INFO -  at 6.8s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2392} INFO -  at 7.0s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2392} INFO -  at 7.7s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:45] {2219} INFO - iteration 25, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:46] {2392} INFO -  at 7.9s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:46] {2219} INFO - iteration 26, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:46] {2392} INFO -  at 8.2s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:46] {2219} INFO - iteration 27, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:46] {2392} INFO -  at 8.5s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:46] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2392} INFO -  at 8.7s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2392} INFO -  at 9.1s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2219} INFO - iteration 30, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2392} INFO -  at 9.4s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2219} INFO - iteration 31, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2392} INFO -  at 9.5s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:47] {2219} INFO - iteration 32, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:48] {2392} INFO -  at 10.1s,\testimator xgboost's best error=0.3469,\tbest estimator xgboost's best error=0.3469\n",
      "[flaml.automl.logger: 05-14 13:36:48] {2628} INFO - retrain xgboost for 0.0s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:48] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=0.9750817307639901, colsample_bynode=None,\n",
      "              colsample_bytree=0.933819554005324, device=None,\n",
      "              early_stopping_rounds=None, enable_categorical=False,\n",
      "              eval_metric=None, feature_types=None, gamma=None,\n",
      "              grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.13168913276734093,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=5,\n",
      "              min_child_weight=2.320184614134321, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=13,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:36:48] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:36:48] {1932} INFO - Time taken to find the best model: 0.4295313358306885\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 13, 'max_leaves': 5, 'min_child_weight': 2.320184614134321, 'learning_rate': 0.13168913276734093, 'subsample': 1.0, 'colsample_bylevel': 0.9750817307639901, 'colsample_bytree': 0.933819554005324, 'reg_alpha': 0.0018935298773689825, 'reg_lambda': 0.11021501173881573}\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 18]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred6 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e5eec0d9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:48] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:36:48] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:36:48] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:36:48] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:36:48] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:48] {2345} INFO - Estimated sufficient time budget=1010s. Estimated necessary time budget=1s.\n",
      "[flaml.automl.logger: 05-14 13:36:48] {2392} INFO -  at 0.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:48] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2392} INFO -  at 0.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2392} INFO -  at 0.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2392} INFO -  at 0.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2392} INFO -  at 1.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2392} INFO -  at 1.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:49] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 1.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 1.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 1.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 1.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 1.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 1.8s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 2.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2392} INFO -  at 2.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:50] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 2.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 2.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 2.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 2.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 2.8s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 2.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 3.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2392} INFO -  at 3.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:51] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 3.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 3.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 25, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 3.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 26, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 3.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 27, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 3.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 4.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2392} INFO -  at 4.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:52] {2219} INFO - iteration 30, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 4.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 31, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 4.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 32, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 4.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 33, current learner xgboost\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 4.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 34, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 4.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 35, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 5.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 36, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2392} INFO -  at 5.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:53] {2219} INFO - iteration 37, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2392} INFO -  at 5.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2219} INFO - iteration 38, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2392} INFO -  at 5.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2219} INFO - iteration 39, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2392} INFO -  at 5.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2219} INFO - iteration 40, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2392} INFO -  at 5.8s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2219} INFO - iteration 41, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2392} INFO -  at 5.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2219} INFO - iteration 42, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2392} INFO -  at 6.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:54] {2219} INFO - iteration 43, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 6.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 44, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 6.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 45, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 6.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 46, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 6.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 47, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 6.8s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 48, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 6.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 49, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 7.1s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 50, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2392} INFO -  at 7.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:55] {2219} INFO - iteration 51, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 52, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 7.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 53, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 7.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 54, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 7.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 55, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 7.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 56, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 8.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 57, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2392} INFO -  at 8.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:56] {2219} INFO - iteration 58, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 8.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 59, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 8.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 60, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 8.5s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 61, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 8.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 62, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 8.8s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 63, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 8.9s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 64, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 9.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 65, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2392} INFO -  at 9.2s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:57] {2219} INFO - iteration 66, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2392} INFO -  at 9.3s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2219} INFO - iteration 67, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2392} INFO -  at 9.4s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2219} INFO - iteration 68, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2392} INFO -  at 9.6s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:58] {2219} INFO - iteration 69, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2392} INFO -  at 9.7s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2219} INFO - iteration 70, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2392} INFO -  at 9.8s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2219} INFO - iteration 71, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2392} INFO -  at 10.0s,\testimator xgboost's best error=0.2356,\tbest estimator xgboost's best error=0.2356\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2628} INFO - retrain xgboost for 0.0s\n",
      "[flaml.automl.logger: 05-14 13:36:58] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=1.0, colsample_bynode=None,\n",
      "              colsample_bytree=1.0, device=None, early_stopping_rounds=None,\n",
      "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
      "              gamma=None, grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.09999999999999995,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=4,\n",
      "              min_child_weight=0.9999999999999993, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=4,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n",
      "[flaml.automl.logger: 05-14 13:36:58] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:36:58] {1932} INFO - Time taken to find the best model: 0.12199521064758301\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 4, 'max_leaves': 4, 'min_child_weight': 0.9999999999999993, 'learning_rate': 0.09999999999999995, 'subsample': 1.0, 'colsample_bylevel': 1.0, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0}\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 19]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred7 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f75c056a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:36:59] {1680} INFO - task = classification\n",
      "[flaml.automl.logger: 05-14 13:36:59] {1691} INFO - Evaluation method: cv\n",
      "[flaml.automl.logger: 05-14 13:36:59] {1789} INFO - Minimizing error metric: 1-accuracy\n",
      "[flaml.automl.logger: 05-14 13:36:59] {1901} INFO - List of ML learners in AutoML Run: ['xgboost']\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2219} INFO - iteration 0, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2345} INFO - Estimated sufficient time budget=1268s. Estimated necessary time budget=1s.\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2392} INFO -  at 0.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2219} INFO - iteration 1, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2392} INFO -  at 0.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2219} INFO - iteration 2, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2392} INFO -  at 0.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2219} INFO - iteration 3, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2392} INFO -  at 0.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:36:59] {2219} INFO - iteration 4, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2392} INFO -  at 0.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2219} INFO - iteration 5, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2392} INFO -  at 1.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2219} INFO - iteration 6, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2392} INFO -  at 1.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2219} INFO - iteration 7, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2392} INFO -  at 1.5s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2219} INFO - iteration 8, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2392} INFO -  at 1.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2219} INFO - iteration 9, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2392} INFO -  at 1.8s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:00] {2219} INFO - iteration 10, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 1.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 11, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 12, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 13, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 14, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 15, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 16, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 17, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2392} INFO -  at 2.8s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:01] {2219} INFO - iteration 18, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2392} INFO -  at 3.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2219} INFO - iteration 19, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2392} INFO -  at 3.1s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2219} INFO - iteration 20, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2392} INFO -  at 3.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2219} INFO - iteration 21, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2392} INFO -  at 3.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2219} INFO - iteration 22, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2392} INFO -  at 3.5s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2219} INFO - iteration 23, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2392} INFO -  at 3.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:02] {2219} INFO - iteration 24, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 3.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 25, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 4.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 26, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 4.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 27, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 4.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 28, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 4.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 29, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 4.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 30, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2392} INFO -  at 4.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:03] {2219} INFO - iteration 31, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 4.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 32, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 5.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 33, current learner xgboost\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 5.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 34, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 5.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 35, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 5.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 36, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 5.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 37, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2392} INFO -  at 5.8s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:04] {2219} INFO - iteration 38, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2392} INFO -  at 6.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2219} INFO - iteration 39, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2392} INFO -  at 6.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2219} INFO - iteration 40, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2392} INFO -  at 6.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2219} INFO - iteration 41, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2392} INFO -  at 6.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2219} INFO - iteration 42, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2392} INFO -  at 6.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2219} INFO - iteration 43, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2392} INFO -  at 6.8s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:05] {2219} INFO - iteration 44, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 6.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 45, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 7.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 46, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 7.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 47, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 7.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 48, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 7.5s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 49, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 7.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 50, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2392} INFO -  at 7.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:06] {2219} INFO - iteration 51, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 7.8s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 52, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 53, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.1s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 54, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.2s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 55, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 56, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.5s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 57, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.6s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 58, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2392} INFO -  at 8.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:07] {2219} INFO - iteration 59, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 8.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 60, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.0s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 61, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.1s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 62, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.3s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 63, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.4s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 64, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.5s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 65, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.7s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 66, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2392} INFO -  at 9.8s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:08] {2219} INFO - iteration 67, current learner xgboost\n",
      "[flaml.automl.logger: 05-14 13:37:09] {2392} INFO -  at 9.9s,\testimator xgboost's best error=0.2567,\tbest estimator xgboost's best error=0.2567\n",
      "[flaml.automl.logger: 05-14 13:37:09] {2628} INFO - retrain xgboost for 0.0s\n",
      "[flaml.automl.logger: 05-14 13:37:09] {2631} INFO - retrained model: XGBClassifier(base_score=None, booster=None, callbacks=[],\n",
      "              colsample_bylevel=1.0, colsample_bynode=None,\n",
      "              colsample_bytree=1.0, device=None, early_stopping_rounds=None,\n",
      "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
      "              gamma=None, grow_policy='lossguide', importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.09999999999999995,\n",
      "              max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=0, max_leaves=4,\n",
      "              min_child_weight=0.9999999999999993, missing=nan,\n",
      "              monotone_constraints=None, multi_strategy=None, n_estimators=4,\n",
      "              n_jobs=-1, num_parallel_tree=None, objective='multi:softprob', ...)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[flaml.automl.logger: 05-14 13:37:09] {1931} INFO - fit succeeded\n",
      "[flaml.automl.logger: 05-14 13:37:09] {1932} INFO - Time taken to find the best model: 0.15395474433898926\n",
      "最好的机器学习模型: xgboost\n",
      "最佳超参数配置: {'n_estimators': 4, 'max_leaves': 4, 'min_child_weight': 0.9999999999999993, 'learning_rate': 0.09999999999999995, 'subsample': 1.0, 'colsample_bylevel': 1.0, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0}\n",
      "accuracy = 0.8072289156626506\n"
     ]
    }
   ],
   "source": [
    "from flaml import AutoML\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_curve, auc, f1_score, precision_score, recall_score\n",
    "import pandas as pd\n",
    "\n",
    "file_path = '数据集.xlsx'\n",
    "data = pd.read_excel(file_path)\n",
    "\n",
    "\n",
    "X = data.iloc[:, :11]  \n",
    "y = data.iloc[:, 20]  \n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train.shape, X_test.shape, y_train.shape, y_test.shape\n",
    "\n",
    "\n",
    "\n",
    "automl = AutoML()\n",
    "# 参数设定\n",
    "settings = {\n",
    "    \"time_budget\": 10,  # 总时间上限(单位秒)\n",
    "    \"metric\": 'accuracy',  \n",
    "    \"estimator_list\": ['xgboost'],\n",
    "    \"task\": 'classification',  \n",
    "    \"seed\": 100,    # 随机种子\n",
    "}\n",
    "# 运行自动化机器学习\n",
    "automl.fit(X_train=X_train, y_train=y_train, **settings)\n",
    "# 输出结果\n",
    "print('最好的机器学习模型:', automl.best_estimator)\n",
    "print('最佳超参数配置:', automl.best_config)\n",
    "\n",
    "## 对测试集进行预估\n",
    "y_pred8 = automl.predict(X_test)\n",
    "# print('Predicted labels', y_pred)\n",
    "# print('True labels', y_test)\n",
    "y_pred_proba = automl.predict_proba(X_test)[:,1]  # 测试集概率\n",
    "y_proba = automl.predict_proba(X_test)  # 测试集标签+概率\n",
    "# print(y_proba)\n",
    "\n",
    "## 测试集效果评估\n",
    "from flaml.ml import sklearn_metric_loss_score\n",
    "print('accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred8, y_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "cd4e6ede",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建一个DataFrame来存储这些数据\n",
    "df = pd.DataFrame({\n",
    "    'IPI00': y_pred1,\n",
    "    'IPI005': y_pred2,  # 假设你已经定义了data2\n",
    "    'IPI010': y_pred3,  # 假设你已经定义了data3\n",
    "    'IPIjinjing': y_pred4,  # 假设你已经定义了data4\n",
    "    'IPI015': y_pred5,  # 假设你已经定义了data5\n",
    "    'IPI2': y_pred6,  # 假设你已经定义了data6\n",
    "    'IPI025': y_pred7,  # 假设你已经定义了data7\n",
    "    'IPI3': y_pred8   # 假设你已经定义了data8\n",
    "})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d5707a93",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Data saved to 测试集预测数据.xlsx\n"
     ]
    }
   ],
   "source": [
    "# 将DataFrame保存到新的Excel文件中\n",
    "output_file = '测试集预测数据.xlsx'\n",
    "df.to_excel(output_file, index=False)\n",
    "\n",
    "print(f'Data saved to {output_file}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "19f8d2b5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>IPI00</th>\n",
       "      <th>IPI005</th>\n",
       "      <th>IPIjinjing</th>\n",
       "      <th>IPI015</th>\n",
       "      <th>IPI2</th>\n",
       "      <th>IPI025</th>\n",
       "      <th>IPI3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>245</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>246</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>247</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>248</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>249 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     IPI00  IPI005  IPIjinjing  IPI015  IPI2  IPI025  IPI3\n",
       "0       10      10           1       1     1       1     1\n",
       "1       10      10           1      10     1       1     1\n",
       "2       10      10           1      10     1       1     1\n",
       "3       10      10           1      10     1       1     1\n",
       "4       10      10           1       1     1       1     1\n",
       "..     ...     ...         ...     ...   ...     ...   ...\n",
       "244     10      10           1       1     1       1     1\n",
       "245     10      10           1       1     1       1     1\n",
       "246     10      10           1       1     1       1     1\n",
       "247     10      10           1      10     1       1     1\n",
       "248     10      10           1      10     1       1     1\n",
       "\n",
       "[249 rows x 7 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e5204c8a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>IPI00</th>\n",
       "      <th>IPI005</th>\n",
       "      <th>IPI1</th>\n",
       "      <th>IPIjinjing</th>\n",
       "      <th>IPI015</th>\n",
       "      <th>IPI2</th>\n",
       "      <th>IPI025</th>\n",
       "      <th>IPI3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1237</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>4</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1238</th>\n",
       "      <td>10</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1239</th>\n",
       "      <td>10</td>\n",
       "      <td>8</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1240</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1241</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1242 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      IPI00  IPI005  IPI1  IPIjinjing  IPI015  IPI2  IPI025  IPI3\n",
       "0        10      10    10           3       3     1       1     1\n",
       "1        10      10    10           7       3     1       1     1\n",
       "2         9       9    10          10      10     9       4     2\n",
       "3         6       8     7           4       8     8       1     1\n",
       "4        10      10    10           4       8     1       1     1\n",
       "...     ...     ...   ...         ...     ...   ...     ...   ...\n",
       "1237     10      10    10           4      10     1       1     1\n",
       "1238     10       4     1           1       1     1       1     1\n",
       "1239     10       8     6           1       1     1       1     1\n",
       "1240     10      10    10           1       1     1       1     1\n",
       "1241     10      10    10           4       4     1       1     1\n",
       "\n",
       "[1242 rows x 8 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_real = data.iloc[:,13:21]\n",
    "y_real"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
